import axios from 'axios'
import type { AxiosInstance } from 'axios'
import { ElMessage } from 'element-plus'
import { useAuthStore } from '@/stores/auth'

// 手动创建一个 axios 对象
const request: AxiosInstance = axios.create({
    // 获取项目根目录下 .env.xxx 文件中的环境变量值
    baseURL: import.meta.env.VITE_APP_BASE_API,
    // 请求超时的毫秒数，请求时间超过指定值，则请求会被中断
    timeout: 20000,
})

// 请求拦截器
request.interceptors.request.use(config => {
    // 在此处可向请求头加上认证 token
    const authStore = useAuthStore()
    // 获取 token
    const accessToken = authStore.accessToken
    if (accessToken) {
        config.headers.Authorization = `Bearer ${accessToken}`
    }
    return config
}, error => {
    // 出现异常， catch 可捕获到
    return Promise.reject(error)
})

// 响应拦截器
request.interceptors.response.use(response => {
    const res = response.data
    // 20000 正常响应，返回响应结果给调用方
    if (res.code === 20000) {
        return res
    }
    // 非正常响应弹出错误信息
    ElMessage.error(res.message)
    return Promise.reject(res)
}, error => {
    // 处理响应错误
    const { message, response } = error
    if (message.indexOf('timeout') != -1) {
        ElMessage.error('网络超时！')
    } else if (message == 'Network Error') {
        ElMessage.error('网络连接错误！')
    } else {
        if (response.data)
            ElMessage.error(response.statusText)
        else
            ElMessage.error('接口路径找不到')
    }
    return Promise.reject(error)
})

// 导出 axios 对象
export default request